@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%L} DD˙`  }J)Lr J  ((  p L ()   JL}L= ( L 0q A    IB JC;? D W L} LL  ` W )LA!  ߰")-݆ p" L} $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ`L }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H L }p h  hyhy D L> L JJ    ! LA*` BFL }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!LL }EE !E^ ^ E E7EȩEdE/EȩE  DL } .L }  ;F d  ;?F7F? ( .   Z D LL d L} . D  L    p  E` , d)  D L) 0BM݊L݉L} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ GL} HLL GɛL  LFREIE SEKT.  G) *Gȩ GȽG GȌ*jj >GL}J,L}Λ90  "d\DOS SYS????????SYSL}LB}L}@@@-----------CDOS SYSB*)DUP SYSB AUTORUN SYSBSTURBO COMBAUTORUNL} BAS C C*(> C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISKL}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU L } L ? .  t`GBJ ~DEHI B V0dVL!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEhL"}DEL8HI4 0 HI,0 0  9 .G VLOL#},0 L4*IJ`llD1:AUTORUN.SYSLADEN NUR MIT MEM.SAV MOEGLICH.D1:MEM.SAV J y08 B|DEHIL$} V0 0`B;DEL`?<0LV`:ʆ v s? F0Ξ05: [ BDEHIL%} VJ8 B V  @  /DE `E:D1:DUP.SYSPROGRAMM-SPEICHERUNG FEHLERHAFT!DOS DENNOCL&}H LADEN? >J/N B;DE J  (` 9 V⪍ ઍ  -L'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BHL(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu L} 3E:}DISKETTEN BETRIEBSSYSTEM II VERS. COPYRIGHT 1985 ATARI CORP.A. DISK-INHALT I. FORMATIERENB. ZUM STECKMODP*}UL J. DISK KOPIEREN C. DATEI KOPIEREN K. BINAER SAVED. LOESCHE DATEI L. BINAER LOADE. NAMEN AENDERN M. START BEI ADRP+}.F. DATEI SICHERN N. MEM.SAV ANLEGENG. DAT. FREIGEBEN O. DAT. KOPIERENH. DOS SCHREIBEN P. FORMATIEREN ӛL !N'P,}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }DOS 2.0s EINLEGEN -> Y, x P-}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!FALSCHE WAHLBITTE P.}WAEHLEN, -> MENUE! 0 .z:*{}.|{ 1 0 0JB 18L%|DLP/}%INHALT [SUCHBEGRIFF,AUSGABEGER.]?[# 0 0 &|D3" 1L!KEINE DISKDATEIN !B 1L!E# 1 !BDP0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.P1}  0?詛 1 y0JЛ 1 ;#L" ;#L! BL1->J ZUM LOESCHEN... LOESCHE DAT.NAMEP2}KOPIE-VON, AUF?DAS KANN ICH NICHT436 FREIE SEKT. KOPIERE---D8:SETUP.COMl# 0|D .L/%#P3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SYP4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E P5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!KEINE 'WILD CARDP6}S' IM ZIEL-DATEINAMEN 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!FORMATFEHLER!WELCHE DATEI LADEN? ) 0 P?}0#B 1L!SICHERN DAT.-NAME?) 0 0$B 1L!FREIGEBEN DAT.-NAME?DUP DISK-ORIGINAL,ZIEL STAT?PROGRAMM-SPEICHER BEP@}NUTZEN? (J/N)ACHTUNG: MEM.SAV WIRD DANN INAKTIV.FE! +L1   `*  70 2 2PA} 0.* 1 y0 0)BEIDE DISKETTEN EINLEGEN, Ԯ^, 1 y038逍 N, 1L! ,PB}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0PC}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhPD}` ZU WENIG RAM! ORIGINAL EINLEGEN, ZIEL DISKETTE EINLEGEN, PE}`  `8 rL1`-* 1P* 1 y0J`hhL!UEBERTRAGE DATEI:...?- 0 0|DL% <.PF},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  PG}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PPH},^ 1 70 0L#L!-* 1P* 1 y0Jj383}mm ݭPI}}`8}``|* ? ɛ,`|:-)| / 1L!`DOS.SYS ALS ZIEL VERBOPJ}TEN! 0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξPK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-DAT.NPL}AME,START,ENDE(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!PM}0 0 1L~0`BITTE NUR 1 ZEICHEN ,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥPN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEPO} ZU LANG! B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LPP}!ERROR- 164ɛ+,' 20*.. өr2 1``2EINGABE ZU LANGUNGUELTIGE HPQ}EXADEZ. PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1D1 - D8 ANGEBENuPR} XADEZ. PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1D1 - D8 ANGEBENuP!!)6`!^^<s3>00x|73>00x`c6<9c` 33c3XT}66fffg~33>00xgfffff<11111{!!\]_\ED!EOHI B V`XU}}   TURBO-BASIC XL 1.5 (c) 1985 Frank Ostrowski!  ӥL]"XV}"$$ (p%J[WܠjeC /D%Zub2gTSt$8®݊Ò2% XW}5RŢtd.’$3@X7t5w5$?## $#L+D:*.*S:C:P:$#.#) `:#(6EXX}NeU\l؏&/ؕ؄sأ$LENeU\lأ$8آǔƐƉƐƇ4cY%٦rULۉCۄړp^gyض%iwܸJڅ*XY}ܣ$ڭڞجئأأ$ ,(""(222000000..222222222222222222222222222222**22*22(222(222222XZ}2222 ,(""(0000000--**2*(22(2222222 V`hh@,lX[}HH$HHHHHHӍl"H$HHl $`GHFH\` ` 4ӭ l 4Lq ӠԪӅԆX\}L} Ӡ L( ӑ) ` b% +L:#HH 0 HHLj%ӥHlL{ee 8X]}eeeeӦee褢%ƚƜ`8X^}8夅奅8夕奕Ӡȱȱȱ㦢`L+`8` .X_}E)))8@8e0 *څۅ܅݅ޅ߄ԠF0y"ޥy"ݥy"ܥy"ۥy"ڥy"و0ǠF0y"ݥy"ܥX`}y"ۥy"ڥy"٥y"؈0ǠF0y"ܥy"ۥy"ڥy"٥y"إy"׈0ǠF0y"ۥy"ڥy"٥Xa}y"إy"ץy"ֈ0ǠF0y"ڥy"٥y"إy"ץy"֥y"Ո0L-`8`E)))8iXb}@0 *ڄԠ"("!""" "L**""""""&ОXc}"("!""" "L**""""""&О"("!"Xd}"" "L**""""""&О"("!""" "L*Xe}*""""""&О"("!""" "L**"""Xf}"""&Оd"("!""" "L**""""""&Xg}ОL-6"e""e""e""e""e""i""}"""}"""}"""}"""}""Xh}"}""ǭ"m"""m"""m"""m"""m"""m"""}"""}"""}"""}"""}"""}""Xi}Յօׅ؅مԅՅօׅ؅`` ` ` `80 `ԥՅ +.JJJJ)iFiFi1FXj}icFi'ȐȦoFiUȐFiiFi#iFiGi Fii@F iiFiiciՊFigi'Xk}iՊօשBL-`I))83Ԥԥդե֤֥פץؤإ٤L,K6"ХL--Xl}L--L--E0:e٥eإeץe֥eՐ؅٥ׅإօץՅ֩L-8٥Xm}إץ֥հ'I8م٘؅ؘׅטօ֘ՅL-ؤm\G0Q@Ն֩م؅2եمֆשXn}"ե؅֥م׆ةեׅ֥؅ץم؆لԘ)q +` . |. &7i |. ,%!Xo}L?.`刱䈱㈱∱ሱ`ԅՅօׅ؅م`ԍՍ֍׍؍ٍ`ԍՍ֍׍؍ٍ`Xp}L.L. Խսֽ׽ؽ` L%/`ӽޕ &ԅ)@إ)JXq}JJe)e - M 1. &Je0F 2 . /L(8`@ԠՈքׄ؄` . |. , . . |. , #/L(8Xr}`0 I@ԥ) 2f / . & r 1. #/ &?P , .Iiԩ +)ԅ ,Xs}ӽޕL(`8`$)Ԧ61718191:1;1 (ť)8@0$Յ)e)e -FXt} . / , . &1 1. #/ &F I`U9>`D'RFuCU?b9dYdg@W2@?tS)%)@0)%ԅXu} / . &G  1.Ӱ6 #/ &.ӽߕ ,ԅԥ B1 (`8``0?i? Xv}. . / , #/ &ԍՍ֍׍؍ٍ . . ( / , O2 / ,0 .JeF 2`L+) .Xw}e٥eإeץe֥eՊi؊؅٥ׅإօץՅֆե1ԥ'JffffJffffJffffJffffم`ԩ&&&Xx}&*&&&&*&&&&*&&&&*`Pi`)JJJeԅԘ)Peԅ`եԆ8@EB)JJJeԅԥ)PeԅԘ)Xy}3eԅԽ3eՅ՘)JJJ}3ԥ}3`)JJJeԅԥ)PeԅԹ3eԅԹ3eՅդЧ` 0@P`'Nu pX@(#d,XXz} L(  兢0襙 bɥ⥋㩀 50ɥ0DȱȱȄ   ik#ZMX{}kVgğe拰ㅋ⅊0 eee拰 L f5дƨħ 4LY4 f5К,樥ŧH 4hX|} h5L4樤ܱ.* O %30  5Ԅ +(fԤԈ`ř嚰Ԥ`ڥۥड़0-԰eڅڐۈX}}0eeL+58` O#`,#5  6`]5 6DE 68DHEIHX~}I V0$ 6Sл B V,# 6` $#LllBHI V0HH V0Ԩh``{a$%Ȏ$$xX}ө$Ѝ$ ` `@X a Ӆʢ ʎD  _ɠ %` ɩHH X}`өL: g% D:AUTORUN.BASөjJHH`ՠԢӱԙ!ӹ!`֝DEIX}HB V0Y|ڝDa۝EօܥׅݥܝHݝI V0+Ӡڑڑ0`l `  X} _ɠԐe拢 &L &Lħ © ¥4 䥝ň剰' k ɀ8@4= LYX} ĩ`OJ ]J?L˜ KԪȱLRHHצ R, hhLRHHHHHH /0ȑȑޠX}hhhhhh`HHHHHHHHHH $H bɐhȥLHhhhhLX}ň剰)i桰` )``L(兢ħ #$ x Hҩ hX}$襚ҥ ԝ` UV #T` ` `,H ¥ȍ` JKhLŢ  #)I L ¤Ȣ`X}L¦ ¦ Lĩ ½J*K+ $LąLĩ …L~ …`H Ġh é`,H hH Ġ X} ĭ 8}} L n [h`LkL © 8倝偝 Ġ  ĥX}  Lĩ LHé éLH#h ĩ`H hKJ L+ , H hHHħ s hKX}hJ  Lĩ# qL ĩ ŘL ũ& QŽLM " ĽNL  ĥԝL՝M  ĥԝN%LV  ¤ħ` X} Ťħ` ƪ Ċ Ťħ` ¢`届 x݅ L ĽCӠɀ L]Ɉ LX}] Ln LŠIHEDBL$HH hh +L `ħ LĢl ¦X}`YDAER ԅՅ֦󅗄`L+ ¢p 0 Hp hɈL` ,#,$,!Lé ,H X} ĥDEԝH՝Ih L©L $`L© , k ĩԅ  + ĥ 夨ħ`2ƪƪ ! A!X}Ƚa!Ƚ!Ƚ!Ƚ!Ƚ!``氤hhL1@$ƪư 0 0 n$P`L+FҐ֥װ綾إٰX}و LǠFfؐ ee&ee* &eeeԪeըee$.ƪ@!Ƚ`!X}!Ƚ!Ƚ!Ƚ!`檦!!!!`!@!^!` Ȅ 8 n奱 ٥Lǥ֤צưĘ=X}ŗ78֪א& eԥe$`L: L ԅՅօׄ 1פ& ٤ţĢX}ԅeՅe8包卅 ]& 8Ԩժ%אְ`ֆL夨ħ` FҰg8&0ei֥i0Tׅiإi0BX}Je؅eم0&ffff&0 &0 eeL+օפإ颎 %8包ԥ卅 X}L ɥ ȱъŠe拰8``,ªȱȱI ѝ3ȥLɥHHX}O]  ȥe暰Х ȥL+ʅȱhh`Lħ OX}ԪȱԨ``L :0 `L(奷 bɥ󥋅ȱȱȱȄ#鈄0B8eX}eŶɛ,@LBˤ,ɛ`L?± ˤ樱f Oƨ x݅ + ~ [ˠ OX}樥0# +  L˥`LL :ɛ,$PH h $P润䧰 ʐLʦX}䧐 +` ʐL3LBˢԝD՝E֝HםI L 兢L]& 兢L% ,L6 ,L6 &L6 (L6妪@!I@X}!` ؐb`P KW ؐRB ؐ=;G ؐ4@ ;+ƪƪ@!=A! (ƪƪ@!A! ƪ@! ,@@檦@!`!!X}!!!!`ƪ@! ǩjҤ /L.٤ƪƪ@!@!, 舽`!`!!ـ!!٠!!!!!`@!jI*` . X}֪ (ϰ`(8` ֤ׅԄ +҅L: Lyƪ8吪周Ly sũ + ŐL X}Ly sŠԄ h L} L}٩    e쪽pLyL( + ڥHJJJJ h) 0:i`  ک; nX} +ȱ)ȥ%ݓ Lh ԍՅԄׅ֩өL:ƪ?Ԣ )ɠ )  -L &LX}ڦ@!)@!` n)8@ -L:` / n)8@I= n)8@/ѩ֔$ሄX} ,L: + n 0L8 n 0L8 n H1L8 n /L8 n /L8 n D/L8 n 1L8LLإL( &)ԥ)8@X}JjH@MC)JJJe)e .F / .P . &F . #/ &L.L(HHHHHX}H /hhhhhh & Y/hԅL:,` L _ܘ%ᨥ%Ly _ܘᨥLy _ܘEᨥELyٚ<|'g X}0L`!!!!i ` &LإL٥LyɥLzvmZ ƨ!0 4 X}䦵 ¥ԝD՝E֝HeםI Lܤį eį L` x݅ƨLLLܤ ©`#ۢX} Lĩ_,ߤ ڄ . eڅԥeۅհ"8څ֥ۅא8ܥݰL۠Q%0ԅإՅ٥X}ަ0%Q% L-ե0LޥڤLyمօנ6&֐ eו`L( Hħ hբX}Յ `ޥԢ `ޥՅ֠&&֐eܥeېڈ 7 \ 7 j N \ N j$0!ee80å/8X}ܥ۰uڕ0eUiV`TUV`8UV`eTi`8TȢ` $L„'X})Q ȱ8 e新`8`L齀).Q Ӱȱ8e新 O X}:L䅫# *$Ŭ Ʃ HL"䥫ș L` Ml/#樱0ZS'`ȱȱȱȱȱȱȄ`ȱօȘX}uԩׅu՘e֨҄`樱I 屝Ҡȱȱȱȱȱ` n$҅J?eԨe` L 兙 X} n %3 Ԥ` ҩ, , , L檤 ٙ!ؙ!י!֙!ՙ`!ԙ@!ә !ҙ!` 䤪ƪ!ٹ!ع!׹!ֹ`!չX}@!Թ !ӹ!`ƪ!!乡!㹁!a!A!Lp ґȥӑȥԑȥՑȥ֑ȥבȥؑȥّ` ***j)e)e`X}ʭȅiȅiȅȩȩ Lfإ  4  \ X} +] ¥򄟄   넨ɛ$0L祔 Z f0#ڠ쩀 ߩ6ei$0 X}녖چ + !5ɛȑ @膔7 ɛ 襔!ɛL! _ɩ8$IX}Ȣ %e拢 &!$P* &8孨客 "&$ 1L~ L~ &L _ɰe拢 &L~ X}+0 %30Ԅ 襡L 9:枢0 O L :H9Hhh tLHH`X}hhLCL馩`ʆLC枢0ְşLC`A枢ƔX}!L!L!T 򈩛LQLD ijq ߰,iŰD VD8` 覲`8`X} 넬 S( +饰0 S0:$$ p8`$p (ȩ@҅ҥ򄬤 ߰ A L8򨢄 %ӤX}ʽ ʽ % +HH 屝EҨhh$P0Ƭ 襯I `_A[`8`8X}0 &Ոԅ` 넬$ +  + h갳 h) + , 褔ԙ!` "8` 襔X} ɛ "ȱ"嫤!`! `) ɛ%)a{)_0:A[_դ`RE͕DATINPUX}ԑCOLOҝLISԖENTEҚLEԛIƜFOҗNEXԑGOTϑGO TϑGOSU½TRAАBYŐCONԞCO͟CLOSŐCLҐDEǞDI͐ENĐNEנOPEΖLOAĖSAVŢSTATUӣNOTPOX}INԡXIϤOΒPOKťPRINԐRAęREAĨRESTORŐRETURΩRUΐSTOАPOХGEԫPUԑGRAPHICӒPLOԒPOSITIOΐDOӒDRAWTϓSETCOLOҬLOCATŔSOUNĦX}LPRINԐCSAVŐCLOAĚERROR- DPOKœMOVœ-MOVŪ*ƐREPEAԑUNTȊWHILŐWENĐELSŐENDIBPUBGEԒFILLTϐDϐLOOШEXIDIҖLOC˖X}UNLOC˖RENAMŖDELETőPAUSŖTIME$PROøEXEÐENDPROÑFCOLOҪ*̕-RENU͒DEDUMЪTRACTEXԖBLOAĖBRUθGO*’PAINԟCLӔDSOUX}NCIRCLū%PUԘ%GEԚGOTGOSUTSTETHEΣ<<>ުNOOANĨ<<>STRCHRUSASVALEADATCOPEESX}IRNFREXLOCLOSQSGABINPADDLSTICPTRISTRIDPEE˦INSTINKEYEXOHEXDEDIFRATIMETIMMOEXERNRANTRUN%%%%GOX}UINSTERER+,%5&6(+8,<Xk`fghilm^deDѳHc?,Ќ,е,Y_X}Ҳ+7,/01 2!3"4Ɛ"-"."-؂ٿ֐ːX}ĐאŐbj+9,+;,X}ʐͭͭ@ABC\=>[<+:е<,&%rvnX}nxc<\-78s_XV+@D&0d*"'2GJhX} NRl~&2 +饰(+VWZ ]a8`L`  ¤ħ.H hX} L5 䄡  䅭 bɠ04Ů .ŭ%) e拰 ĩ L+X}Ư0 Le`毤Hɛ) h`  L ȱ R @ʆ ȱȄX} Iğ` :62T F :7 8 Lbԩ- L 8 8,I ɨ 8L.UH `ƨh $ %3  X} + \L L 8󅯩" ¥ 8" ©" Ư" L8q :Z#]abj(=) W같  LX}樤ħ`hh`H YhZ L<>EO ƹƹ0`H f5h`I&` =? FQA`X} L񄳱ȱI 䦐Ħ ąŅ T k /䧰 k ,Ǡ ĩJH ThĥȑX}ĥȑĦʊȑ`HHąŅH h hhhh ȱIELZ L`ȱI HȱX}ȱȱȱȱ , h @ $L+L.*ȱȱȱȱȱjEE `EjI `eX}`ħ ¥0 ` Lk 䦪`! 䧰L A@L `I&`X}L ©؅ L.0`STOPPED륺 bɠhhL :ʅ` k %3Hƹ h5X}h`hbjH h #ԤLQ #LLei  `LԑȥՑȥ֑ȥבȥؑȥّ`X}`䈥剰#)iiLɠL4űI&`048ץX}ğ=ȱȄ `L  L0e拠0ȱȄL  䦪`!' >?L X} (<ж`!  $Л +`,LőŐ78Ƒ8 Ƒ`8` X}- PѠ`,,L L PQ 8,L ȱI X}ߠȱ`ԩ,L E  $EL+L],,,؍ 0âLɀL ©7 F󦹩 RX}bL g 0g `Ո V fL{Ն + +􅕄L AT LINE?BLOAMEVALU>#VAR$LE?DAT>327X}6INPUDISTACOVERFLO?LIN?FOTOO LON?DE?GOSUGARBAG?CHMEͣ?LOA?NES?WHIL?REPEA?D?EXIXPRO?EXE?PRO?IS OPE?DEWX}R ONLCMNOT OPEΣRD ONLEOTRUNTIMEOUNA!FRAMCURSO!OVERRUCHKSUDONMODNOT IMPRA͠D?>#FILEDSK FULFATAL IX}/FILENAMPOINLOCKEDCM>DI?FILPOIN?APPNBAD SECTORӥHՄ +h & .hԩ + ,҅L: ƪnX} (@Մ$ 0` 0` 0LoH - . /h &@Յ՘JJJJ X) 0:i`AVC2 sŠ X}5  <)  < L L + e +e`e`&&&&&X}&eee` &&eee&*`` 兙 䦪!0 4 ۄܱ **m ݤܱX}Eۅڦڱ= ܥeƥiեLN@ ` **)]` 00`` ( (((((((X}(8`W)ߥ & &e &߽řِ׼JJJJ&eXޥeYߥ䥛X} 9 FfЎᰈ `  M 8*` 兙 󥐅iX}祣L{ &L  0 & L ȑ & L; # )ȱX} L )ȱ) )ȱ 8ƣŐő0eސ`ƙ8X}ް`)ȱJJJ```=`]``` E߭H Ġ} hL±&LvX}`[  ȱ R]  L L  䅠 bɰhhğȱȄ L l"0e拱Y}>8888&;@`px|xx\ @R H88h`H88<= 18h88m8>8<>88T}=>8` 8 888 1888Ѝ` 8 8 88 18 888 ?8`8JH 8hJH8 8hJ8 ?88T} 8`W^M~L8LLi0HW9NNi h`880LMWL>M8 ^MT}~L 88 NW9^N` 9`l8`9 9)I9 99 U9`l8`9. 9 8 88LMN 9ʎ88 T}88 9 89` $$%8888 8 8`ЍР`8`CUTWLMpA:0H:)909` T}:0 8 8ύ8ߍ8 8 898Ȍ9 88ԩ>/Э 8 8 oo`B&L9%L9 L :`<:l:0:;:N:T}9: #; MM:>`l:`>i>D:TURBO.COM : : : : >7> B V0T}BD>EJ V0 e> B V`HL`88N;@;@;;`M;L;JJJJH)J;h) JJK;L;: ;HH;J; D;J;T}hHI;K; D;K;h ;J;H;K;I;8nL; @;M;Д`l8``M;L;JJJJH)J;h) JJK;L;: ;HH;J; D;J;TEE4 I HEIGHXHAIRLOOI@@&@VAH@ &&!------------------------------! &&\}! TESTPTR BY SIZ 1991 ! &&!------------------------------! &&! This program demonstrates !&&! some fea\}tures of Multi-Mouse !&&! in a BASIC environment. !&&!------------------------------!&&!--------------\}----------------!&&! Set up a graphics 15 screen !&&! with a text window. !&&!-------------------------\}-----! +@@&&!------------------------------!&&! Read in the custom shape, a !&&! crosshair. \} !&&!------------------------------!";$@%@,67@,.>:,!!-@$\}@%@"67,.>:, &&!------------------------------! &&! Open the mouse driver and !!&&! set\} the maximum limit to !"&&! (159,159) so that the mouse !#&&! cannot enter the text window.!$&&!---------------\}---------------!%##@@M:&0(@Most!6-AY0@'&&!-------------------\}-----------!(&&! Display the crosshair, wait !)&&! for a click and plot the !*&&! point at the shape. \}!+&&!------------------------------!,;(@Click;@2@@-@, \}.&&!------------------------------!/&&! Display the standard pointer,!0&&! wait for an unclick and draw !1&&! \}a line to that point. This !2&&! enables the line to be !3&&! "dragged". !4&&!------------\}------------------!5F(@UnclickF@2@@>:,6@/ 7 \}@D8&&!------------------------------!9&&! Data for the shape. The data !:&&! is made up as follows: !;&\}&! Line 63: height,xoff,yoff !<&&! Line 64: "white" data !=&&! Line 65: "black" data !>&&!--------\}----------------------!? 11,3,5@%%0,16,16,16,16,108,16,16,16,16,0A))56,40,40,40,238,130,238,40,40,40,56 D:AU\}TORUN.BAS------------!? 11,3,5@%%0,16,16,16,16,108,16,16,16,16,0A))56,40,40,40,238,130,238,40,40,40,56 D:AU\ 67 HEIGHXHAIRLOOIERROINOUTBUFFERMLMHEOPLAS@@&@VAYvIi} $H  &&!------------------------------! &&! TURBOMOD.TUR Bi}Y SIZ 1991 ! &&!------------------------------! &&! This program reads in your !&&! Turbo-BASIC XL binary file i} !&&! and creates a new one that !&&! is compatible with some !&&! other MEMLO-changing devices !&&! i}including my 80:, M: and N: !&&! device handlers. This !&&! program supersedes 80TBMODI !&&! because thei} new binary file !&&! will now load correctly !&&! whether or not a low-memory !&&! device is used, there i}is no !&&! need to keep a separate copy !&&! of Turbo-BASIC XL. !&&!------------------------------!i}&&!------------------------------!&&! Read in the names of the !&&! input and output files. ! &&!-i}-----------------------------!! "&&;@ ,;@ ,;A@,# Input file: $ Output file: %i}+@+@@&+@+@@'(&&!-----------------------------i }-!)&&! Modify the first segment to !*&&! replace the fixed MEMLO with !+&&! MEMLO-checking code. !,&&!--i }----------------------------!-!)@!file header .!)@!Segment head/!)@!Segment ti }ail0!)@!Memlo consts1,*@ AU AU,file header2-*@ @ @3-segment headi }3-*@ @& @3-segment tail4""*@ A` Ai5..*@ A A2 @ ADi }6..*@ @ A @ A7..*@ A1 @ AD @8..*@ A@ @ Ai}A A2966*@ @ A@ A1 @ @:-*@ A& @-init segment;-*@i} A' @-init segment<.*@ @ @3.run new code.=>&&!------------------------------!?j}!dBʝ  ` ``  } }  `8     `8   `    ^ ~ e} e  e &` > &&8  > > ƀ` !  ` =   =  `   e}   ` ]   ]  ` I  I `    U  M  E  `  2  (  ׽e} ͽ     `   } }  `  ` > } } e}ȱ ` > } } Ƚ `} } ` 腋`8HH``膇`e}H8     h}  }  `8           Ā фIJ)eee}慠ф$%Ɓ   ``` #Ji  ` #J #i  ` # #JJ e}#JJ8   i L6#8    8  8 ȱ 8 ȱ   e} }  }  %`   ȱ 8  8 ȱ L6# }  } 8ȱ僰 6#8e}  ȱ   } Ƚ }  }  }  %`8  8 ȱ  6# ȱ  Ƚ e} 8倥偐 $>  %e!}> `    1 8 Ѝ`    1 8  ? ` JH hJH hJ ?  e"}`W^M~L LLi0HW!NNi h` 80LMWL>M ^M~Le#} 8 NW!^N` !`l `! !)I! !! U!`l `!. ! 8LMN !ʎ  8e$} ! !` $$%8    `ЍР` `CUTWLMpA"0H")!0!` "0e%} ύ ߍ  ! Ȍ! ԩ>/Э   oo`B&L!%L! L "`<"l"0";"N"!"e&} ## MM"&`l"`&i&؛ " " " " &7& B V0Be'}D&EJ V0 e& B V`HL` 49CFKNUYbehoty~e(},AWq #(-=S]diqv{e)}%(*@EJPU\t  N#@#@##`M#L#JJJJH)J#h) JJK#L#: #HH#J# D#J#hHI#K#e*} D#K#h #J#H#K#I#8nL# @#M#Д`l `` #08;BGJOR_bgjwz}  Z#@#@##e+}y``W#Y#X# @#W#yX#riN#siR#X#Y#Y#ǩM#yN#M#NM#jNM#jN#e,}yR#N#NN#jNN#jI #Ђl `` */369>KX`ejquz  G#@#@##`e-}E# #8)HMF#      #h)F# @#E#`l `` *KQTW]  E#@#@#{#`De.}# u#yJJJJ @#D#`l `` 8;E  P#@#@##`ccO#N#JJJJH) Je/}L#h)M#M#N#: #HJ#L# D#L#hHK#M# D#M#h #L#J#M#K#8nN# @#O#В`l `` %39e0}<?FKNSVcfkn{~ D:MM.COM !11 !00 !e1}00 !0000 ! ! R" !LY1 !00 !00 ! '(11 ! ! R" !L1 !00 !11 ! '( !L1e2}1 ! ! '(`0123456789ABCDEF$xx !11)111JJJJ111 !11 !`L2Please type in two hexe3}1 ! !0 !00 ! 1LH2characters. There is no12 ! !0 !00 ! 1L2need to press Return: j2 ! !e4}0 !00 ! 1L21122 ! 4' !11 !A ! f" !L2 !1 &!0 ! 5! !1L3 !1 &!Ae5} ! 5! !11 ! ! f" !11 !1 !1 # !1 ! R'1182121L2 ! ! R' !1 " !e6} ]! !1 " !`L3Please type a filename̠3 ! !0 !00 ! 1L4ae7}nd press Return: 4 ! !0 !00 ! 1 !3 ! ! e( !3333 ! ! R" !L43 !: ! 7"3 !: e8}! 7" ! !L4L4D:4 ! !3 ! %3 !3 !33 !3 ! $3 !33 !`L4333 !33 !`e9} !55 ! !44 !4L*5**5555&5'5Hȱh !44 &! ! ! &! ! !4e:} &! !558&55'55L@5` !55 !55 !55 !5550 !55 !55 !55 !e;} 50 !0 &! &! !+ !55 !55 ! '(0 ! K!55 !55 !55 ! 55` !^6Lw6Creating drivee<}rh6 ! !L6, please wait...6 ! ! 1 ! w' ! ! !ɠ0 !00 ! 'Ǡ( ! !\, !v ! 5^6 !e=} ! &L7H- ! !- ! ! 5L7 ! &LH7. ! !Ӡ. ! ! 5L7 ! &Ls7/ !J !ՠ/ ! ! 5e>}L7 ! &L7 / !b !o/ ! ! 5L7 ! &L7/ ! !0 ! ! 5L7 ! w'`x:+7+ ! ! e?}%" !L8L8(None)7 ! !0 ! %L28}Multi-Mouse v2.1c by S.8 ! !LL8 Trew 1991.A8 ! ! 1 ! ! R'Le@}8For help see section 5 ofk8 ! !L8 the manual.8 ! ! 10 !00 !0 !00 ! 1L8A. Start Page......eA}.. Ԡ8 ! !0 ! &! 1 1L"9B. Device name....... 9 ! !ؠ7 !77 ! 1LZ9C. Driver filename... D9 ! eB}!ɠ0 !00 ! 1L9D. Foreground|9 ! !0 !00 ! 1L9E. Background9 ! !0 !00 ! 1L9F. ReseC}erved pages.... ۠9 ! !0 ! 1 1L":G. Dos 2.x file...... : ! !0 !00 ! 1L[:H. Make ST mouse driverDeD}: ! !0 !00 ! 1L:J. Make tablet driver}: ! !0 !00 ! 1L:K. Make joystick driver: ! !0eE} !00 ! 1L;L. Make trakball driver: ! !0 !00 ! 1L@;M. Make Amiga mouse driver&; ! !0 !0eF}0 ! 1Ls;N. Make core onlyb; ! !0 !00 ! 1L;Q. Quit; ! !0 !00 ! 1 ! ! R'`eG}N+S+N+ ! &! ! ! 4' !;; !A ! &L< 1 !00 ! ! ! ! 7" !LN+N+L?E ! &L>S+S+L?F ! &L> 1 !00 ! ! f" !L>LeL}[>You must reserve atH> ! !0 !00 ! 1L>least 6 pages for}> ! !0 !00 ! 1L>the driver.> !eM} !0 !00 ! 1 1 !0L/>L?G ! &Lm? 3Ϡ; ! %Ϡ; !;; !L?? ! ! 3$ !Le?Ϡ; !;; !eN}0 ! %0 ! !+ ! %+Lj?+L?H ! &L? ! _6L?J ! &L? ! _6L?K ! &L? ! _6L?L ! &eO}L? ! _6L?M ! &L? ! _6L?N ! &L? ! _6L?; !D ! f"; !E ! R" ! !L;; !`LF@You are adeP}vised not to0@ ! !0 !00 ! 1L@use any drivers createdh@ ! !0 !00 ! 1L@on this run after@ eQ}! !0 !00 ! 1L@this error occurred.Ԡ@ ! !0 !00 ! 1`0 ! ! R" !L,A00 !eR} &! ! 5! ! ! !0` AؠA [# ! w' ! w' ! ! !LAK:~A ! ! ' 7 ;Q ! %" !LAGoodbye.AeS} ! !0 !00 ! 1 ! w' V#`ؠA [#LAError A ! ! ! 1 15 ! !LB -@5L*BPress any key: BeT} ! !0 !00 ! 1 ! 4' ! ]! !L\A V#`PAA ! ! ! 1 15 ! !LB -@5L*BPress any key: Bd=MULTI-MOUSE VERSION 2.1cBy Simon Trew, 1991.1.0 About This Manual.This manual documents the Multi-Mousesoftware versiyV}on 2.1c. Version 2.1cis a full release version and this isthe complete documentation.This release supersedes releases 1.0yW},1.1, 1.2 an 2.1b, which are now nolonger supported. 2.1b was a beta-test version. No comments werereceived as result of yX}sending beta-test copies, and so the software (butnot the documentaton) is identical torelease 2.1b. However some files hayY}vebeen added to the disk.1.1 Contents.This manual is split into severalfiles so that it can be easily fittedinto mostyZ} word-processors or texteditors. It was written usingTextPro, a very good public-domainword-processor, but it should bepy[}ossible to use it on most othereditors with the minimum of effort.The document files are calledMMMANx.DOC where x is the y\}sectionwhich is in that file. For examplesection 5 is in the file MMMAN5.DOC.You should at least read up tosection 5 befy]}ore using the program.The manual is written in a fairlysequential way so that the easy stuffis dealt with first and then ty^}heharder stuff, and sections 2 to 5just detail the program operation andhow to get started with it.A full contents list y_}follows: 1.0 About this manual 1.1 Contents 1.2 Files on the disk 2.0 General features 2.1 Basic opery`}ation 3.0 New features 3.1 New CIO commands 3.2 PUT commands 3.2.1 NOTE actions 3.2.2 POINT actiya}ons 3.2.3 Notes on NOTE and POINT 3.3 The RENAME XIO 3.3.1 Notes on the RENAME XIO 3.3.2 A sample syb}hape 3.4 Old bugs 4.0 Configuration 4.1 Start page 4.2 Device name 4.3 Driver filename 4.4 Foregyc}round colour 4.5 Background colour 4.6 Dos 2.x file 4.7 Reserved pages 4.8 Creating the files 5.0 Muyd}lti-Mouse and Turbo-BASIC XL 5.1 Notes on Turbo-BASIC XL 6.0 Machine code access 6.1 Vectors 7.0 How Multiye}-Mouse is configured 7.1 Generating data tables 7.2 Advantages & disadvantages 7.3 Other configuration 8.0yf} Device drivers 8.1 Mouse 8.2 Trakball 8.3 Touch tablet 8.4 Joystick 9.0 Endnotes 9.1 New tabletyg} driver 9.2 Other device drivers 9.3 Distribution 9.4 Over to You1.2 Files on the disk.The disk contains yq}`-----------`ɭ````````Ԡ`ͮ`ᠭ`堹``````-----------b%DOS SYSb*)DUP SYSb AUTORUN SYSbSTURBO COMbAUTORUN BAS`-----------bEMMCONFIGCOMbTURBOMODTUR`-----------``-----------bUMMMAN1 DOCb{MMMAN2 DOCbmMMMAN3 DOCb"MMMAN4 DOCb MMMAN5 DOCb,3MMMAN6 DOCb"_MMMAN7 DOCbMMMAN8 DOCbMMMAN9 DOC`-----------``-----------b STMAUS COMb AMIGA COMbJOYSTICKCOM# TRAKBALLCOM# TABLET COM`-----------```-----------# STMAUSTBCOM# AMIGATB COM#JOYSTTB COM# TRAKBLTBCOM# TABLETTBCOM`-----------files in anarchived form. Of course, a de-archive program is included in theroot directory. The READ.ME file notonly tellyr}s you to read this and howto de-archive the files, but may alsogive update information which hasbeen written since this mays}nual waslast updated.The only files you need to generatethe Multi-Mouse drivers are in thePROGRAMS archive. The main proyt}gramyou wil want is MMCONFIG.COM which isa binary file which configures thedrivers (see section 4). If you wantto use theyu} drivers with Turbo-BASICXL, you will also need TURBOMOD.TUR,which is detailed in section 5. Italso contains FILEDUMP.COM yv}which maybe useful you if you want to writeyour own drivers.The other files in the PROGRAMSarchive are BASIC demonstratiyw}onprograms. TESTPTR.BAS is just a basictest that allows you to draw lines ona screen. It is well commented andis worth lyx}ooking at to show how easyit is to use the drivers in programs.The SOURCE archive contains all thesource code for the driyy}vers, for theMMCONFIG program and the FILEDUMPprogram, as well as the source codefor the Turbo-BASIC XL patch inTURBOMOD.yz}TUR.The DOCS archive contains thesedocuments, of course.ll as the source codefor the Turbo-BASIC XL patch inTURBOMOD.x>2.0 General Features.Multi-Mouse is a set of machine codeprograms for operating a pointingdevice within your programs. It}|} isintended for use in mouse-orientedprograms (I do the P, you do the WIM)Because few people have mice fortheir Atari 8-b}}}it, Multi-Mouse hasbeen developed to allow a joystick,mouse, touch-tablet or trakball to beused. Your program need not kno}~}wwhich is being used.The word "mover" in this manual istaken to mean "mouse, trakball,joystick or tablet".The mover sh}}LjLx`[  ȱ R]  L L  䅠 bɰhhğȱȄ L l"0e拱Xould be plugged into theport 2 on your machine, leaving port1 free for those of you who alwayshave a joystick connected. }}To create the screen pointerMulti-Mouse uses two players fromthe player/missile system. Thismethod allows the pointer to }}overlayanything on the screen. Two playersare used so that the pointer can bemade in two colours, which makes itvisible a}}t all times, regardless ofwhat colour screen you are using.2.1 Basic Operation.Multi-Mouse is installed as a CIOdevice}} having the title M:. It isloaded in during the boot process(see Configuration, section 4). Itprotects itself from Reset a}}nd sowill be avaiable until the computeris switched off or rebooted.To display the pointer, use OPEN #n, 12, 0, "M:"}}Where n is the channel number withwhich to access the pointer. Issuingthe OPEN statement makes a pointervisible in the mi}}ddle of the screen.To allow the pointer to be movedaround, issue the followingstatement: NOTE #n, X, YThis will allo}}w the pointer to bemoved using the mover, until thebutton is pressed. It then returnsthe position of the pointer into the}}X and Y variables. The position isreturned as co-ordinates in thecurrent screen mode. For example, ifyou are in Graphics 8}} then X will bein the range 0..319 and Y in therange 0..191.You can force the pointer to acertain position using the POI}}NTstatement: POINT #n, X, Ywill position the pointer at thepixel given in X, Y. Of course insome modes the pixels ar}}e quite big.With POINT, the pointer is alwayspositioned at the top left of thepixel. NOTE will return the screenco-ordina}}tes of a pixel whenever anypart of the pixel is being pointedat. So the pointer may move slightlyif you do a set of statem}}ents suchas: NOTE #n, X, Y POINT #n, X, YTo get rid of the pointer from thescreen, use CLOSE #nPerforming a }}NEW or END in BASICautomatically CLOSEs all channelsexcept 0.You can change the colours of thepointer by POKEing locatio}}ns 704(foreground) and 705 (background).The value to poke into the bytes isgiven as: luminance + (16 * colour)atio|y3.0 New Features.Many new features have been added tothe Multi-Mouse driver. These do notincrease the amount of user memo}ryrequired, because they sit in theunused portion of player/missilememory. In fact you can configure theprogram to give y}ourself more usermemory than the last version. However,the extra features do mean that youcannot use any of the missiles f}romthe player/missile system, becausesome of the code lies in that area.New features include: * Compatibility with Tur}bo-BASIC XL. * Relocation and configuration. * Easy user-defined pointers. * New CIO commands. * More flexibl}e NOTEing. * Pointer window definition. * A better tablet handler. * An easier interface for machine-code routin}es.3.1 New CIO commands.You can return the status of thebutton using a STATUS command. If anybutton on the pointing de}vice ispressed, it will return 0, otherwiseit will return 1. For example: STATUS #n, X IF X=0 THEN PRINT "You're Dea}d!" IF X=1 THEN PRINT "Aargh! You Got Me!"You can also find out where theprogram is loaded, using a GETcommand. It }returns a byte which isthe page number of the start of theMulti-Mouse program. This is usedmainly to POKE into the Multi-M}ousedata table (see section 6). Forexample: GET #n, PAGE:BASE=PAGE*256 PRINT "Multi-Mouse loaded from address ";B}ASE3.2 PUT command.There is also a PUT or PRINT command.This command is used to configure howMulti-Mouse responds to }NOTE andPOINT.In the default mode, the NOTE commandwaits until a button is pressed,returning the position of the pointer}; the POINT command sets the pointerposition. However you can changethese actions using a PUT command.There are seven upp}ercase lettersthat you can PUT, each having adifferent action. If you use anyletter other than the seven allowed,it is ig}nored. This lets you PRINTmnemonics which make the statement'spurpose more obvious. For example: PRINT #n, "Click" P}RINT #n, "isWhere"Only the uppercase letters C and Whave any effect in these statements.The key letters are: C, U, W, T, }P, Land M. The last three are used toadjust how the POINT action works.The first four are used to adjust howthe NOTE acti}on works.You are not advised to PUT any otheruppercase letters as part of yourcommenting text, because futureversions ma}y use them. Lower-caseletters are guaranteed to be unused,and are safe for commenting.3.2.1 NOTE actions.PRINT #n, "Cl}ick"Putting a "C" to the channel makesall future NOTE commands wait untilthe button is being pressed, thenreturns the co}-ordinates. If thebutton is being pressed when the NOTEis issued, it returns straight away.PRINT #n, "Unclick"Putting a} "U" to the channel makesall future NOTE commands wait untilthe button is NOT being pressed, thenreturns the co-ordinates.} If thebutton is not being pressed when theNOTE is issued, it returns straightaway.PRINT #n, "Toggle"Putting a "T" to }the channel makesall future NOTE commands examine thestate of the button when the NOTE isissued. NOTE then waits until the}button changes state, then returnsthe co-ordinates. So if the button ispressed when the NOTE is issued, itwill allow the} pointer to be moveduntil the button is released.Otherwise it will allow the pointerto be moved until the button ispresse}d.PRINT #n, "Whereis"Putting a "W" to the channel makesall future NOTE commands returnimmediately with the co-ordinates} ofthe pointer. The NOTE will not allowany pointer movement.An OPEN of the M: device sets theNOTE mode back to "Click".}3.2.2 POINT actions.It is now possible to set the windowinside which the pointer may be moved.The default is to set the} windowedges the same as the margins at theedges of the standard screen. You maywant to alter this so that yourestrict th}e pointer to a smallerwindow.PRINT #n, "Most"Putting an "M" to the channel makesthe next POINT command set the bottomr}ight corner of the window. Forexample, the following statementsrestrict the pointer to the graphicswindow of a split graph}ics 7 screen: GRAPHICS 7 OPEN #1, 12, 0, "M:" PRINT #1, "Most" X=159:Y=79:POINT #1,X,YPRINT #n, "Least"Putti}ng an "L" to the channel makesthe next POINT command set the topleft corner of the window. Forexample, the following state}mentsrestrict the pointer to the textwindow of a split graphics 8 screen: GRAPHICS 8 OPEN #1, 12, 0, "M:" PRINT #}1, "Least" X=0:Y=192:POINT #1,X,YPRINT #n, "Position"Putting a "P" to the channel makesall future POINT commands work} asnormal, setting the pointer position.The "Least" and "Most" commands onlyhave currency for one POINT afterwhich Multi-}Mouse returns to the"Position" state anyway. However thiscommand may be useful for cancellinga previously given "Least" or} "Most"which has not been followed by aPOINT command. An OPEN of the M: device sets thepoint mode back to "Position".}3.2.3 Notes on NOTE and points aboutPOINT. Whenever you define a window, thecurrent position of the pointer ischecked. I}f the pointer is outsidethe new window then it is moved tothe nearest edge or corner.POINT and NOTE commands alwaysrestr}ict the pointer to the window.The co-ordinates returned by a NOTEare always relative to the top leftcorner of a standard g}raphics screen,not relative to the top of the window.If you would rather it was the otherway about then tell me. I couldn'}tmake up my mind.You may set the window to includeparts outside the standard screen.Multi-Mouse will still produceco-or}dinates. If the pointer is aboveor to the left of the standard screenorigin then it will return a largepositive value. (Ac}tually it's atwo's complement number, so you canwork out the "real" co-ordinate valueby adding it to -256.) If the pointer}is below or to the right of thebottom right of the standard screenthen the values just keep going in apositive direction.}The use of a window outside thenormal screen area is not encouraged.It will not hurt Multi-Mouse butfuture versions may }not support thisfeature in the same way, if at all.You are not encouraged to define awindow and then switch graphics mode}s. If the new graphics mode is a lowerresolution than the old, the activearea may be half-way across a pixel,because the }physical screendimensions and position of the activearea will stay the same. This couldbe quite frustrating for a user.}3.3 The RENAME XIO.XIO 32 (RENAME from some languages)has now been defined so that you canchange the way your pointer loo}ks.The pointer is stored as a series ofconsecutive bytes and it is intendedthat you store your own pointer in astring in }BASIC, or as a char arrayin C. The format of the XIO is: XIO 32, #n, 12, 0, MYPOINT$Your pointer can be any length up }to255 bytes. However, the longer thepointer is, the longer it takes toerase and draw, and the slower theresponse to a dev}ice will be. Alength of 16 or so is enough for mostpurposes. (The standard pointer is 14bytes long.) MYPOINT$ (or whatever}you happen to call it) should becomposed as follows:MYPOINT$(1,1) should contain CHR$(h)where h is the height of the poi}nterin pixels.MYPOINT$(2,2) should contain CHR$(x)where x is the x offset. A pointerhas an associated x and y offsetwhi}ch indicate the position of thedatum point relative to the top leftof the pointer. The datum point isthe point from which }the co-ordinatesare calculated, and it is this pointwhich is limited to the window. The xoffset is the number of player/m}issile pixels from the left edge ofthe stripe to the datum, and can beany number in the range 0..255. Ifyou need an x offs}et to the left ofthe left edge of the stripe then useCHR$(256-n) where n is the offset,for example CHR$(256-3) would give}you an offset 3 pixels to the left ofthe left edge.MYPOINT$(3,3) should contain CHR$(y)where y is the y offset. The y off}setis the number of player/missilepixels from the top of the stripe tothe datum, and can be any number inthe range 0..255}. If you need a yoffset above the top of the pointerthen use CHR$(256-n) where n is theoffset, for example CHR$(256-10)wo}uld give you an offset 10 pixelsabove the top edge.MYPOINT$(4,3+h) contains theforeground shape data (h being theheight }of the shape). These aredefined in the normal way forcharacters and player/missilegraphics (see section 3.3.2 for anexamp}le).MYPOINT$(4+h,3+h+h) contains thebackground shape data. Shapes havetwo colours so that they are alwaysdistinguishable}. However there's notmuch point, although it's possible,to have both background andforeground at the same pixel.3.3.1 N}otes on the RENAME XIO.When you issue an XIO 32 the pointeris immediately updated on screen.However, you have not actuall}y made acopy of the pointer into anyMulti-Mouse data area (just theplayer/missie stripes). The pointerdata only exists in} your string. Thepointer on screen is updated withthis information whenever you performany of the following: Issue an} XIO 32 command. Move the pointer vertically with a NOTE. Issue a POINT command. OPEN the M: device.Multi-Mo}use keeps track of what iscurrently being displayed and so itcan work out what to erase and fromwhere, even though the cu}rrentpointer is different from the one onscreen (it ain't so dumb as to erasethe whole stripe each time). Because the po}inter data is only heldin your string, any changes in thestring will be taken into account thenext time the screen pointer} isupdated. When switching betweenpointers, the new pointer is drawn sothat the datum point is kept in thesame place as b}efore. Changing thecontents of your string is notencouraged; a much cleaner way is tokeep a different string for eachpoin}ter and just XIO 32 with the oneyou want, for example: XIO 32, #n, 12, 0, XHAIR$ NOTE #n, X, Y XIO 32, #n, 12, 0, }BUSYBEE$ NOTE #n, X, YWhen you OPEN the M: device, thestandard pointer is always restored.You can also restore it at a}ny timein your own program. To do thisdefine a pointer of zero height. Forexample: XIO 32, #n, 12, 0, CHR$(0)You sho}uld use a 12 as the secondparameter to any XIO. (That is, useXIO cmd, #n, 12, .....) This isbecause a bug in the operating} systemmeans that this number is treated asthe number you used in your OPENstatement, and so using 12 means youOPENed for} read and write. If you useanother number, the CIO may reportthat you have read-only or write-onlyaccess if you try to PRI}NT or GETfrom the device. Some languages donot suffer this problem (Atari BASICworks OK with any number), but othersdo (T}urbo-BASIC XL requires a 12). 3.3.2 A sample shape.This section shows how to define a}crosshair pointer. It really is quitesimple.First, mark out your shape on a grideight dots wide and however deep youwan}t, like this: ..bbb... 0 56 ..bFb... 16 40 ..bFb... 16 40 ..bFb... 16 40 bbbFbbb.} 16 238 bFF.FFb. 108 130 bbbFbbb. 16 238 ..bFb... 16 40 ..bFb... 16 40 ..bFb... 1}6 40 ..bbb... 0 40For each row, you have to addtogether a number for each of the'b's (background) and each o}f the'F's (foreground) to get the numbersin the columns to the right of thegrid. Each column in the grid has anassociated} number. The leftmostcolumn is worth 128, then 64, 32, 16,8, 4, 2, and the rightmost is worth 1.Add together the numbers f}or all thecolumns with an 'F' in them. Forexample row 6 has 'F's in columnsworth 64, 32, 8, and 4, so the totalforeground} for that row is 108.Similarly, row 6 has 'b's in columnsworth 128 and 2 so the totalbackground for that row is 130.The }height of the shape is 11 rows.The datum is 3 columns from theleftmost column and so the x offsetis 3 (note that the leftm}ost columnhas an x offset of 0). The datum is 5rows from the top row and so the yoffset is 5 (again, the topmost rowhas a} y offset of 0). So the totaldata for the shape is: DATA 11,3,5 DATA 0,16,16,16,16,108,16,16,16,16 ,0 DATA 56,4}0,40,40,238,130,40,40,40, 56You can then read this into yourpointer string with statements suchas: READ HEIGHT }DIM XHAIR$(HEIGHT+HEIGHT+3) XHAIR$(1)=CHR$(HEIGHT) FOR LOOP=2 TO HEIGHT+HEIGHT+3 READ IN:XHAIR$(LOOP)=CHR$(IN) N}EXT LOOPWhen defining your shape, rememberthat a player/missie pixel is twiceas wide as it is high. If you forgetthis, y}ou may find that your shapeslook rather squashed.3.4 Old Bugs.All reported bugs from previousversions have now been co}rrected.Details of these corrections follow.On version 1.0 there was a bug that aNOTE in Graphics 8 would return 255into} the Y co-ordinate when thecursor was at the top of the screen.On version 1.0 theRe was a bug thatan OPEN would not alway}s display thepointer. This has now been cured.There still remains the "bug" thatchanging graphics mode will upset the pl}ayer/missile system. This isbecause of bad programming in the OSand cannot be avoided except byintercepting the GRAPHICS c}all. Youshould CLOSE the channel and re-OPENit whenever0you change graphics mode.Mf you do not, you will get an uglystrip}e. You will not harm theMulti-Mouse software. The Break key is still not checked,so that Break has no effect until theha}ndler returns control to yourapplication.e. The Break key is still not checked,so that Break has no effect until theha,4.0 Configuration.Before you use the Multi-Mousesoftware you must configure it foryour application. Configuring allowsyo}u to set your own preferences andto change the defaults. Configuringmakes the program operate with agreater variety of oth}er software,because you can change it to fit inwith that software.Configuring is done by the programMMCONFIG.COM. This i}s the onlyprogram yo need to create devicedrivers. All of the code for the fourdevice drivers is included in theMMCONFIG.}COM binary file.To run MMCONFIG, use your DOS'sbinary file load option. You cannotBRUN it from Turbo-BASIC XL.The confi}guration options areselected by pressing the appropriateletter key, and sometimes also typingin a value. The options are d}escribedbelow:4.1 Start Page.Option A allows you to change thestart page. This is a hex numberwhich indicates where t}he Multi-Mouseshould sit in memory. Normally youwill not have to worry about thisbecause it defaults to the lowestpossibl}e value for the currentconfiguration of your system. You canchange it if you know that you wantMulti-Mouse elsewhere to wo}rk withanother program.The best advice is to load in all theutilities you would normally use whenusing Multi-Mouse, then} run thisprogram and leave this option at thedefault. Valid values are hex valuein the range 00-F8, but the startpage mus }t lie on a 2K boundarybecause of the player/missilegraphics.4.2 Device Name.If you already have a driver whichhas the } M: handle, you will want tocall Multi-Mouse another name. Youcan do this by selecting the devicename using option B. For }example, ifyou chose H then you would use thefollowing command to open the device: OPEN #n, 12, 0, "H:"4.3 Driver }filename.Option C allows you to change thename of the file that is written outby the program. You are asked to typea fil }ename. If you omit to include adevice specifier, D: is assumed.4.4 Foreground Colur.This option specifies the default}foreground colour of the pointer. Thecolour is that of the background ofthe screen, and pressing D cycles it.4.5 Backgro}und Colour.This option specifies the defaultbackground colour of the pointer. Thecolour is that of the border of thescre}en, and pressing E cycles it.4.6 DOS 2.x file.If you are using Multi-Mouse underany Atari DOS 2 derivative then youcan} get it to load another file afterit has loaded. You can use this toload a chain of files in an AUTORUNsequence. My other }device driversalso allow you to do this so you arenot restricted to one AUTORUN perdisk. Note that the filename is thatof} a binary file (not a BASIC file)and must include the D: part. Seesection 5 on using Multi-Mouse withTurbo-BASIC XL if you} wish to useTurbo-BASIC XL with Multi-Mouse.If you press Return in response tothe prompt without entering afilename, the}n (None) will appear asthe filename. This means thatMulti-Mouse wil not load anotherbinary file once it is loaded.4.7 R}eserved pages.Option G allows you to rseserve pagesof memory for your own use, forexample to use players 2 & 3 of thepla}yer/missile system, or to reservermemory for a user-defined characterset. Multi-Mouse by default reservessix pages, and se}ts MEMLO to thestart page + $06. If you reserve morepages, then those pages between(start page + $06) and (start page +re}served pages -1) inclusive are freefor your own use.4.8 Creating the files.Options H-L allow you to create abinary fil}e for any of the fourdrivers included. Alternativelyoption 10 allows you just to createcode for the CORE section. Thisall}ows you to append your own machinecode device driver to it. Do not tryto run the CORE program on its own;you must append a} binary file whichtakes care of the vectors detailed insection 6. You will only want to usethis option if you want to writ}e yourown device driver.If you are using DOS 2.x, you willwant to name your file AUTORUN.SYS sothat it will load automat}ically whenyou boot the disk. Or you may want tohave all four drivers on the disk andselect from a menu which one to load.}lly whenyou boot the disk. Or you may want tohave all four drivers on the disk andselect from a menu which one to load.5.0 Multi-Mouse and Turbo-BASIC XL.Multi-Mouse can be configured for usewith Turbo-BASIC XL, but thefollowing notes must !}be observed.Turbo-BASIC XL sits in low memory,whereas Atari BASIC sits in highmemory. Unfortunately this means thatyou m"}ust have a different Multi-Mousebinary file for the different BASICs.(The only thing you need to change iswhere the progra#}m sits in memory.Everything else can stay the same.)The starting page (option A from themenu) should be at least $38 for u$}sewith Turbo-BASIC XL.Before you use your drivers, you mustalso modify your copy of Turbo-BASICXL. The standard copy has%} a rathernasty approach to MEMLO. It setsMEMLO regardless of any other programthat is in low memory. The programTURBOMOD.&}TUR allows you to create anew copy of Turbo-BASIC XL which onlyadjusts MEMLO if it is too low forTurbo-BASIC XL to operate'}. This isgood programming practice, and all mydevice drivers use this method sothey can all be used together.TURBOMOD.TU(}R is better than aprevious version of this utility,80TBMODI.TUR, which I produced for my80-column device. The new version)}allows you to use the same copy ofTurbo-BASIC XL whether or not you arenot using another application thatsits in low memor*}y. You can use thiscopy with the 80-column device, ofcourse. TURBOMOD.TUR is a Turbo-BASICXL program and you will need to +}runit under the Turbo-BASIC XLenvironment.Once you have modified Turbo-BASICXL, your altered copy can be usedwhether or,} not you are using theMulti-Mouse utility (or any otherlow-memory utility).5.1 Notes on Turbo-BASIC XL.You cannot BLOA-}D the Multi-Mousedriver (or any other application thatsits in low memory) from Turbo-BASICXL: it must be the other way aro.}und.This is because your BASIC programsits in low memory it would be erasedby the newly-loaded driver. So if youwant Turb/}o-BASIC XL to autoboot,rename the binary file to TURBO.COMand use option G on the MMCONFIG menuto load from it. Of course 0}you canonly do this under DOS 2.x. If youhave another DOS (for exampleSpartaDOS X) then create a batch filewhich loads in1} the Multi-Mouse driverand then loads in Turbo-BASIC XL.I have not tried Multi-Mouse withcompiled Turbo-BASIC XL programs2}. Multi-Mouse driverand then loads in Turbo-BASIC XL.I have not tried Multi-Mouse withcompiled Turbo-BASIC XL programs6.0 Machine Code Access.This section is intended for thosewho wish to add their own devicedrivers for such things as the4}keyboard or a light pen. It does notdiscuss in general the way theprogram works. I hope that the codeis commented enough t5}o make itunderstandable. Multi-Mouse is written in two parts.The first, CORE, contains theMulti-Mouse primitives such as6} movethe pointer to a given position,convert player/missile co-ordinatesto OS ones, all the CIO handling, andso on. The o7}ther part is thedevice-dependent part which handlesmovement and click operations for aparticular device. The two partscom8}municate through three procedureswhose addresses are defined in atable along with many other things.The address of this t9}able can beaccessed by performing a GET andmultiplying the result by 256. (Thetable always starts on a pageboundary.) I g:}uarantee that thistable and the following callingmechanisms will stay the same forfuture issues. I do not guarunteeanythi;}ng else. Do not call particularaddresses or assume that certainlocations hold certain values.You must decide for yoursel<}f where toplace your driver. You are notencouraged to use the player/missilearea, because future versions ofMulti-Mouse m=}ay use it. You can update the table at any time,even from BASIC, and your changesremain until reboot, except for thoseth>}ings that are always updated on anOPEN (detailed in sections 2 and 3).The table contains:Address Mnemonic Contents?}------- -------- --------+0 and +1 calcxy Address ofpointer move routine.+2 and +3 movep Address ofd@}evice move routine.+4 and +5 clickp Address ofdevice click routine.+6 and +7 saddr Address ofshape (i.e. addA}ress of string passedto XIO 32, or the default).+8 xcoord Pointer xposition (P/M coord).+9 ycoord B} Pointer yposition (P/M coord).+10 forecol Foregroundcolour on OPEN.+11 backcol BackgroundcolourC} on OPEN.+12 minx Left edge ofactive area (P/M coord).+13 miny Top edge ofactive area (P/M coD}ord).+14 maxx Right edge ofactive area (P/M coord).+15 maxy Bottom edge ofactive area (P/M coE}ord).6.1 Vectors.The calcxy vector is supplied by theCORE system. By doing an indirect JSRthrough this vector you can F}get andset the co-ordinates of the pointer.You are encouraged to use this vectorto get the co-ordinates rather thanlook uG}p xcoord and ycoord in thetable. (All of the supplied devicedrivers use the vector.) The calcxyroutine should be called wiH}th a valuein the A register. The lowest threebits when set cause the calcxyroutine to:Bit Function--- -------- I}0 Set the x position to thevalue in the X register. 1 Set the y position to thevalue in the Y register. 2 ForJ}ce a redraw of the pointer.The A register is unchanged by theroutine. X and Y are loaded with theactual co-ordinates of tK}he cursor:these may be different from yourrequested co-ordinates if the pointerwas limited to the active area. Make sureL} all "unused" bits of A arereset, because future versions mayuse them for other purposes. You arenot required to make sureM} that X andY are in range: that is doneautomatically. Even with bit 1 set,the pointer is only updated if theactual y co-oN}rdinate has changedsince the last screen update. If youmust have the screen updated then setbit 2. The only reason you shoO}uldwant to set bit 2 is if you changethe pointer address (saddr) to a newpointer. For example with a light penyou may wanP}t a completely blankpointer when the light pen is lifted.But try to leave things as you findthem, or your user may get annQ}oyed.Example call to calcxy: LDA #%000 ; Get the status JSR indirect ; of the pointer. : R} : indirect: JMP (calcxy)The actual values loaded into X and Yare player/missile co-ordinates ofthe position of the dS}atum point. The click vector should be providedby your driver. It is used todetermine the state of the button.Your routiT}ne should set A to 0 if thebutton is pressed, and to 1 if it isnot pressed. You are not required tosave any registers or fU}lags. End yourroutine with a RTS. Example (fromJOYSTICK): click: LDA stick1 ; Get stick value RTS V} ; Simple eh!The movep vector should be providedby your driver. It is called by NOTEto allow the pointer to be movedarouW}nd. On entry, the A register willbe set to indicate the exit condition.If the click function returns thevalue in this regiX}ster your routineshould return. NOTE decides the valuedepending on whether it is in Click,Unclick or Toggle mode.Your moY}vep function should move thepointer around using the calcxyvector. It should return with a RTS.You are not required to savZ}e anyregister3 or flags. Good0practicedictates that you should call yourclick function to determine the exitcondition, al[}though only a puristwould do this by going through theclickp vector. For example: movep: STA exit ; Save exitcondi\}tion loop: LDA #0 ; Main loop. : : LDA #%011 ; Set X and Y. JMP indirect ; update]}screen. JSR clickp ; Done yet? CMP exit ; Check exitcondition. BNE loop ; No, loopb^}ack. RTS ; Yes, done. indirect: JMP (calcxy)heck exitcondition. BNE loop ; No, loopbE7.0 How MMCONFIG.COM was generated.MMCONFIG.COM was generated largelyautomatically, and it may be usefulto discuss the wa`}y I did it.The 6502 processor does not make iteasy to generate relocatable code ofany size, because there are norelativea} jump instructions and so on.It is therefore difficult to writecode that will relocate itself whenit loads. This is furtheb}r hinderedbecause the standard DOS loader mustload programs into absolute addresses.My solution is to produce aconfigurac}tion program which allowsthe programs to be configured to workat a particular place in memory. Ofcourse, this does mean thd}at anyparticular configuration is thenfixed once the file is written out. The first time I used this method waswih my 80e}-column driver. In thatinstance the configuration programwas written in BASIC, which made itrather slow, so this time I chf}ose towrite it in PL65 (which I used towrite Multi-Mouse itself, except thatI only used assembly language and nohigh-leveg}l statements). 7.1 Generating data tables.The method I use is to compile all ofthe programs twice, at differentplacesh} in memory. The first time theyare compiled at $2000, the second at$3000, although in fact the secondcan be compiled on ani}y page boundary.The first object file is given theextension .20 and the second .30. TheFILEDUMP program is then run which,j}when given the filename, takes thetwo versions and produces a .REC filefrom them. For example given thefilename CORE it tk}akes CORE.20 andCORE.30 and generates CORE.REC. This.REC file contains PL65 statementsand can be directly included into thl}eMMCONFIG program with no furtherprocessing.The .REC file contains two datatables: The first is just a hex dumpof the .m}20 file. The second givesoffsets into this table where thedata bytes are different between the.30 and .20 files.Effectivn}ely the only differences willbe page addresses of data items andprocedures within the program. Byadding on a delta value to}o each ofthese values, the program caneffectively be relocated by wholepages.7.2 Advantages & disadvantages.This methp}od has the flaw that thecode can only be relocated by wholepages, although in this case there isno disadvantage because itq} must starton a 2K boundary for the player/missile graphics to work. Also, itcannot cope with any arithmetic onaddresses r}other than additions andsubtractions. That is, if an addresswas say multiplied by three then therelocator could not detects} it.However, it is very unusual (andthoroughly bad practice) to doanything to addresses other than addor subtract offsetst} from them.The beauty of it is that therelocation is entirely automatic, andthat all that is needed to generate abinary u}file is to dump the firstbuffer straight to disk. It alsomakes the configuration programstand-alone with no need to have av}nyother files to run the configuration.The write_code procedure in theMMCONFIG program actually performsthe relocation. w}It calls add_delta torelocate the code, writes the buffer,and then calls add_delta again torelocate the code back to itsox}riginal position, so that it can berelocated to a different place in thesame run. 7.3 Other configuration.The other py}art of the configurationis to configure items such ascolours, the DOS file to load, and soon. For these there are a set ofz}offsets into the CORE data table,which is then updated whenever theoptions are selected. The offsetshave to be worked out{} manually, sincethere is no easy way to have themautomatically computed. But the jobcan be completed fairly easily armedw|}ith a cross-reference and a listingof the program from which the dumpwas created. (That is, the COREsource code.)In fact}} it is these miscellaneousconfigurable items which are the realproblems to program for; therelocation is very simple once ~}theprocedures have been written. I tryto offer a fairly reasonable set ofitems but it could be taken further,the idea is }to know when to stop. Ifyou think that a particular variableneeds to be configurable, for examplethe position of the point}er on anOPEN command, then tell me about it.ular variableneeds to be configurable, for examplethe position of the point08.0 Device Drivers.This section describes data formatsof the four supported input devices.8.1 Mouse.An ST mouse retur}ns a four-bit valueinto the joystick pins. The value canbe read using STICK(1). My devicereads the hardware register direc}tly,because the shadow register isupdated too slowly to keep up withfast mouse movement.The four-bit value is split into} twotwo-bit pairs. Bits 1 and 0 handlethe horizontal axis, bits 3 and 2handle the vertical axis.The two bit-pairs change} in a Graycode as the mouse moves. The Graycode order is thus: 00 01 11 10 00 again, and so on.If the mou}se in one direction, thissequence is returned continuously asthe mouse moves. If it is moving inthe opposite direction, th}e sequenceis returned in the opposite order.All that is necessary to determinemovement is to compare the two-bitcode aga}inst the last read code. Ifthe two are the same, no movement hasoccured. If they are different, thecode is checked against} a tablecontaining the Gray code sequence. Ifit matches the value in this table,it is moved in the appropriatedirection, }else it is moved in theopposite direction.The left button on the mouse isreturned like the joystick button, inSTRIG(1). }The right button comes outonto the second paddle. When theright button is pressed the paddlevalue falls from 228 to about }100.However I do not use this valuebecause I found it to be unreliable.Did you know you can play MissileCommand with a m}ouse when in Trakballmode?8.2 Trakball.The trakball, like the mouse, returnsa four-bit coded value where two bitsare }for the vertical axis and two forthe horizontal. As with the mouse, Iread the hardware register directly,because the shado}w is updated tooslowly for fast trakball movement.Bit 3 of the trakball output changeswhen there is vertical movement. If}the value of bit 3 has changed sincelast read, bit 2 indicates thedirection of movement, 1=down, 0=up.Similarly, bit 1 c}hanges when thereis horizontal movement. If the valueof bit 1 has changed since last read,bit 1 indicate the direction of}movement, 1=right, 0=left.All trakball trigger values return inthe same way as the joystick, viaSTRIG(1).8.3 Touch Tab}let.The Touch Tablet re|}rns two paddlevales.0The hosmzontal axis isreturned in PADDLE(2), and thevertical in PADDLE(3).}The axes both run from 0 to 228. Inthe horizontal axis, 0 is the left ofthe tablet, and 228 is the right ofthe tablet. I}n the vertical axis, 0is the bottom of the tablet and 228is the tp of the tablet.I "trim" the values so that there isno }need to have the pointer rightagainst the edge of the tablet.Notice that the vertical axis isinverted compared to that of }thescreen.The touch tablet has three buttons,and each of these resets one bit inSTICK(1). Since I don't discriminatebet}ween buttons I just check whetherany bit is reset by comparing thevalue of STICK(1) with %1111.8.4. Joystick.The joyst}ick returns a four-bit valuein STICK(1). Each bit corresponds toone of the directions. Bit 0 is setto 0 when there is up m}ovement. Bit 1is set to zero when there is downmovement, bit 2 when there is leftmovement and bit 3 when there isright mo}vement.Diagonal movements set two of thebits to zero, for example up and leftsets bits 0 and 2 to zero. It ispossible to} set both 'up' and 'down'bits, but it should never happen(Multi-Mouse will just cancel nothbits out so no movement will oc}cur.)The trigger button is, of course,returned in STRIG(1).-Mouse will just cancel nothbits out so no movement will ocA9.0 Endnotes.This section includes miscellaneousinformation concerning your beta-testrelease and also requesting your hel}p.9.1 New Tablet Driver.I have redesigned the tablet handlersince version 1.0 of Multi-Mouse. Theaveraging is now muc}h better (it hada bug in it before). It also preventsthe shape from zooming to the topright corner when the pointer isrem}oved from the tablet. Instead itjust stays where it was.9.2 Other Device Drivers.I have written Multi-Mouse with theid}ea of allowing people to add theirown device drivers. I hope that Ihave provided a good enough interfaceand documentation }to allow this.However, if you have a device thatyou would like to use with Multi-Mouse, but don't feel up to writingfor }it yourself, I can help. Contactme and I will try to arrangesomething.I have only programmed for thosedevices which I ow}n. I should beespecially interested if anyone haswritten a device driver for one thefollowing devices, or wants onewritte}n: 0 koala Pad (should be just a new Tablet driver.) Light Pen Keyboard9.3 Distribution.You} may distribute Multi-Mouse at nocharge. The only condition is thatyou must not modify the programsbefore distributing the}m. This issimply because otherwise I end upgetting technical questions frompeople who have a modified copy thatI don't kn}ow about. If you have anymodifications, include the details asa text file on the disk, and pleasesend me a copy.9.4 Ove}r to You.If you have written a device yourself,I would be very pleased to receive acopy of the source code. With yourper}mission, I will then include it inthe configuration program anddocument it as part of Multi-Mouse.Of course, you will be c}redited asthe author.If you spot any errors in thedocumentation, of either a technicalor a typographical nature, please}annotate the documentation and returnit. I need your support. As a user ofmy utilites, tell me what you thinkof them and h}ow I can improve them.Phone me on (0438) 354652, or writeto:Simon Trew322 York RoadSTEVENAGEHerts.SG1 4HW.This pr}ogram came from L.A.C.E.The London Atari Computer EnthusiastsSimon Trew322 York RoadSTEVENAGEHerts.SG1 4HW.This prA&&! Copy the rest of the file !@&&! in the usual way, making !A&&! a 4000-byte copy pass until !B&&! an EOFj} or an error occurs. !C&&!------------------------------!D<E FC@C:,A@G]6-U: A@%j} @,H I6- A@J!KB@C:,LAM=NO&&!------------------------------j}!P&&! Error routine: If EOF then !Q&&! the copy completed or the !R&&! user ended his input. !S&&! Otj}herwise display the error. !T&&!------------------------------!U ] Vl"A6W Program finished OK.X@j}Y Error l at line mZA[D:TURBOMOD.TUR!U ] Vl"A6W Program finished OK.X@hAF@@@@&C@`px|xx\ @R H@@h`H@@DE 1@h@@m@>@D>@@}E>@` @ @@@ 1@8@Ѝ` @ @ @@ 1@ @8@ ?@`@JH @hJH@ @hJ@ ?@@} @`W^M~L@LLi0HWANNi h`@80LMWL>M@ ^M}~L @8 NWA^N` A`l@`A A)IA AA UA`l@`A. A @ @8LMN Aʎ@@ }@8 A @A` $$%8@@@ @ @`ЍР`@`CUTWLMpAB0HB)A0A` }B0 @ @ύ@ߍ@ @ @A@ȌA @@ԩ>/Э @ @ oo`B&LA%LA L B`@D>@@}E>@` @ @@@ 1@8@Ѝ` @ @ @@ 1@ @8@ ?@`@JH @hJH@ @hJ@ ?@@} @`W^M~L@LLi0HWANNi h`@80LMWL>M@ ^M}~L @8 NWA^N` A`l@`A A)IA AA UA`l@`A. A @ @8LMN Aʎ@@ }@8 A @A` $$%8@@@ @ @`ЍР`@`CUTWLMpAB0HB)A0A` }B0 @ @ύ@ߍ@ @ @A@ȌA @@ԩ>/Э @ @ oo`B&LA%LA L B`@D>@@}E>@` @ @@@ 1@8@Ѝ` @ @ @@ 1@ @8@ ?@`@JH @hJH@ @hJ@ ?@@} @`W^M~L@LLi0HWANNi h`@80LMWL>M@ ^M}~L @8 NWA^N` A`l@`A A)IA AA UA`l@`A. A @ @8LMN Aʎ@@ }@8 A @A` $$%8@@@ @ @`ЍР`@`CUTWLMpAB0HB)A0A` }B0 @ @ύ@ߍ@ @ @A@ȌA @@ԩ>/Э @ @ oo`B&LA%LA L B`@D>@@}E>@` @ @@@ 1@8@Ѝ` @ @ @@ 1@ @8@ ?@`@JH @hJH@ @hJ@ ?@@} @`W^M~L@LLi0HWANNi h`@80LMWL>M@ ^M}~L @8 NWA^N` A`l@`A A)IA AA UA`l@`A. A @ @8LMN Aʎ@@ }@8 A @A` $$%8@@@ @ @`ЍР`@`CUTWLMpAB0HB)A0A` }B0 @ @ύ@ߍ@ @ @A@ȌA @@ԩ>/Э @ @ oo`B&LA%LA L B`@D>@@}E>@` @ @@@ 1@8@Ѝ` @ @ @@ 1@ @8@ ?@`@JH @hJH@ @hJ@ ?@@} @`W^M~L@LLi0HWANNi h`@80LMWL>M@ ^M}~L @8 NWA^N` A`l@`A A)IA AA UA`l@`A. A @ @8LMN Aʎ@@ }@8 A @A` $$%8@@@ @ @`ЍР`@`CUTWLMpAB0HB)A0A` }B0 @ @ύ@ߍ@ @ @A@ȌA @@ԩ>/Э @ @ oo`B&LA%LA L B`8888&;@`px|xx\ @R H88h`H88<= 18h88m8>8<>88}=>8` 8 888 1888Ѝ` 8 8 88 18 888 ?8`8JH 8hJH8 8hJ8 ?88} 8`W^M~L8LLi0HW9NNi h`880LMWL>M8 ^M}~L 88 NW9^N` 9`l8`9 9)I9 99 U9`l8`9. 9 8 88LMN 9ʎ88 }88 9 89` $$%8888 8 8`ЍР`8`CUTWLMpA:0H:)909` }:0 8 8ύ8ߍ8 8 898Ȍ9 88ԩ>/Э 8 8 oo`B&L9%L9 L :`<:l:0:;:N:}9: #; MM:>`l:`>i>D:TURBO.COM : : : : >7> B V0}BD>EJ V0 e> B V`HL`88N;@;@;;`M;L;JJJJH)J;h) JJK;L;: ;HH;J; D;J;}hHI;K; D;K;h ;J;H;K;I;8nL; @;M;Д`l8``M;L;JJJJH)J;h) JJK;L;: ;HH;J; D;J;E>8888&;@`px|xx\ @R H88h`H88<= 18h88m8>8<>88}=>8` 8 888 1888Ѝ` 8 8 88 18 888 ?8`8JH 8hJH8 8hJ8 ?88} 8`W^M~L8LLi0HW9NNi h`880LMWL>M8 ^M}~L 88 NW9^N` 9`l8`9 9)I9 99 U9`l8`9. 9 8 88LMN 9ʎ88 }88 9 89` $$%8888 8 8`ЍР`8`CUTWLMpA:0H:)909` }:0 8 8ύ8ߍ8 8 898Ȍ9 88ԩ>/Э 8 8 oo`B&L9%L9 L :`<:l:0:;:N:}9: #; MM:>`l:`>i>D:TURBO.COM : : : : >7> B V0}BD>EJ V0 e> B V`HL`88P;@;@;;`ccO;N;JJJJH) JL;h)M;M;N;: ;HJ;L; D};L;hHK;M; D;M;h ;L;J;M;K;8nN; @;O;В`l8``O;N;JJJJH) JL;h)M;M;N;: ;HJ;L; DI>8888&;@`px|xx\ @R H88h`H88<= 18h88m8>8<>88}=>8` 8 888 1888Ѝ` 8 8 88 18 888 ?8`8JH 8hJH8 8hJ8 ?88} 8`W^M~L8LLi0HW9NNi h`880LMWL>M8 ^M}~L 88 NW9^N` 9`l8` )I9 9 U9`l8`9. 9 8 88LMN 9ʎ88 }88 9 89` $$%8888 8 8`ЍР`8`CUTWLMpA:0H:)909` }:0 8 8ύ8ߍ8 8 898Ȍ9 88ԩ>/Э 8 8 oo`B&L9%L9 L :`<:l:0:;:N:}9: #; MM:>`l:`>i>D:TURBO.COM : : : : >7> B V0}BD>EJ V0 e> B V`HL`88E;@;@;{;`D; u;yJJJJ @;D;`l8``B V0t>8888&;@`px|xx\ @R H88h`H88<= 18h88m8>8<>88}=>8` 8 888 1888Ѝ` 8 8 88 18 888 ?8`8JH 8hJH8 8hJ8 ?88} 8`W^M~L8LLi0HW9NNi h`880LMWL>M8 ^M}~L 88 NW9^N` 9`l8`9 9)I9 99 U9`l8`9. 9 8 88LMN 9ʎ88 }88 9 89` $$%8888 8 8`ЍР`8`CUTWLMpA:0H:)909` }:0 8 8ύ8ߍ8 8 898Ȍ9 88ԩ>/Э 8 8 oo`B&L9%L9 L :`<:l:0:;:N:}9: #; MM:>`l:`>i>D:TURBO.COM : : : : >7> B V0}BD>EJ V0 e> B V`HL`88G;@;@;;`E; ;8)HMF;      ;h)F; }@;E;`l8``J V0 e> B V`HL`88G;@;@;;`E; ;8)HMF;      ;h)F; >8888&;@`px|xx\ @R H88h`H88<= 18h88m8>8<>88}=>8` 8 888 1888Ѝ` 8 8 88 18 888 ?8`8JH 8hJH8 8hJ8 ?88} 8`W^M~L8LLi0HW9NNi h`880LMWL>M8 ^M }~L 88 NW9^N` 9`l8`9 9)I9 99 U9`l8`9. 9 8 88LMN 9ʎ88 }88 9 89` $$%8888 8 8`ЍР`8`CUTWLMpA:0H:)909` }:0 8 8ύ8ߍ8 8 898Ȍ9 88ԩ>/Э 8 8 oo`B&L9%L9 L :`<:l:0:;:N: }9: #; MM:>`l:`>i>D:TURBO.COM : : : : >7> B V0 }BD>EJ V0 e> B V`HL`88Z;@;@;;y``W;Y;X; @;W;yX;riN;s}iR;X;Y;Y;ǩM;yN;M;NM;jNM;jN;yR;N;NN;jNN;jI ;Ђl8``X;riN;sf>8888&;@`px|xx\ @R H88h`H88<= 18h88m8>8<>88}=>8` 8 888 1888Ѝ` 8 8 88 18 888 ?8`8JH 8hJH8 8hJ8 ?88} 8`W^M~L8LLi0HW9NNi h`880LMWL>M8 ^M}~L 88 NW9^N` 9`l8`9 9)I9 99 U9`l8`9. 9 8 88LMN 9ʎ88 }88 9 89` $$%8888 8 8`ЍР`8`CUTWLMpA:0H:)909` }:0 8 8ύ8ߍ8 8 898Ȍ9 88ԩ>/Э 8 8 oo`B&L9%L9 L :`<:l:0:;:N:}9: #; MM:>`l:`>i>D:TURBO.COM : : : : >7> B V0}BD>EJ V0 e> B V`HL`88G;@;@;;`E; ;8)HMF;      ;h)F; }@;E;`l8``J V0 e> B V`HL`88G;@;@;;`E; ;8)HMF;      ;h)F;